Знайомимося із Yii
==================

У даному розділі ми опишемо створення основи додатка, яка буде слугувати нашою відправною точкою. 
Для простоти, приймемо, що коренева директорія нашого веб-сервера — `/wwwroot`, 
а відповідна їй URL-адреса — `http://www.example.com/`.

Встановлення Yii
----------------

Спочатку ми встановимо фреймворк.
Завантажимо дистрибутив фреймворку (версії 1.1.1 або вище) з сайту
[www.yiiframework.com](http://www.yiiframework.com/download) і розпакуємо в директорію `/wwwroot/yii`. 
Переконаємося, що отримали директорію `/wwwroot/yii/framework`.

> Tip|Підказка: Фреймворк Yii може бути встановлений в будь-якому місці файлової системи, не обовʼязково в `wwwroot`. 
Директорія `framework` містить весь код фреймворку і є єдиною та необхідною при розгортанні додатка. 
Одна копія Yii може використовуватися декількома додатками.

Після встановлення Yii відкриємо вікно браузера і перейдемо за адресою
`http://www.example.com/yii/requirements/index.php`.
Ми побачимо аналізатор вимог, що поставляється разом із релізом Yii.
Для блогу, крім того, що потребує сам фреймворк, для доступу до БД SQLite нам знадобляться розширення PHP `pdo` та `pdo_sqlite`.

Створення основи додатка
------------------------

Скористаємося утилітою командного рядка `yiic`, що йде в комплекті з фреймворком,
для створення основи додатка в директорії `/wwwroot/blog`. 
`yiic` може бути використана для генерації коду, що дозволяє зменшити обсяг повторюваного коду, який набирається вручну.

Відкриємо вікно командного рядка і виконаємо наступну команду:

~~~
% /wwwroot/yii/framework/yiic webapp /wwwroot/blog
Create a Web application under '/wwwroot/blog'? [Yes|No]y
…
~~~

> Tip|Підказка: Щоб використовувати утиліту `yiic` як показано вище, шлях до PHP повинен бути прописаний в системній змінній PATH. 
> Якщо це не так, то ми можемо використовувати наступну команду:
>
>~~~
> шлях/до/php /wwwroot/yii/framework/yiic.php webapp /wwwroot/blog
>~~~

Спробуємо запустити щойно створений додаток. 
Відкриємо браузер і перейдемо за адресою `http://www.example.com/blog/index.php`. 
Ми повинні побачити, що згенерована заготовка вже має 4 повнофункціональних сторінки: «Головна», «Про проект», «Контакти» і «Вхід».

Нижче ми коротко опишемо, що саме ми отримали.

###Вхідний скрипт

У нас є файл [вхідного скрипта](/doc/guide/uk/basics.entry) `/wwwroot/blog/index.php`:

~~~
[php]
<?php
$yii='/wwwroot/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';

// видалити наступний рядок у режимі production
defined('YII_DEBUG') or define('YII_DEBUG',true);

require_once($yii);
Yii::createWebApplication($config)->run();
~~~

Це єдиний скрипт, до якого користувачі мають прямий доступ. 
Спочатку скрипт підключає файл початкового завантаження `yii.php`. 
Потім створює екземпляр [додатка](/doc/guide/uk/basics.application) із заданими налаштуваннями і виконує додаток.

###Базова директорія додатку

Також, у нас є [базова директорія додатку](/doc/guide/uk/basics.application#application-base-directory) `/wwwroot/blog/protected`. 
Більша частина нашого коду і даних буде зберігатися в цій директорії і повинна бути захищена від прямого доступу користувачів із веб.
Для [веб-сервера Apache](http://httpd.apache.org/) ми кладемо в цю директорію файл `.htaccess` із наступним змістом:

~~~
deny from all
~~~

Інструкції по налаштуванню захисту директорії від прямого доступу для інших веб-серверів ви можете знайти у відповідній документації.

Послідовність роботи додатка
----------------------------

Щоб зрозуміти роботу Yii, опишемо послідовність роботи нашого додатка при зверненні користувача до сторінки `Контакти`:

 0. Користувач запитує URL `http://www.example.com/blog/index.php?r=site/contact`;
 1. Для обробки запиту запускається [вхідний скрипт](/doc/guide/uk/basics.entry);
 2. Екземпляр [додатка](/doc/guide/uk/basics.application) створюється і налаштовується із початкових значень, 
    вказаних в файлі конфігурації `/wwwroot/blog/protected/config/main.php`;
 3. Додаток передає обробку запиту певній [дії](/doc/guide/uk/basics.controller#action)
    [контролера](/doc/guide/uk/basics.controller).
    Запит сторінки `Контакти` обробляється дією `contact` контролера `site`
    (методом `actionContact` класу `/wwwroot/blog/protected/controllers/SiteController.php`);
 4. Додаток створює контролер `site` (екземпляр класу `SiteController`) і виконує його;
 5. Виконується дія `contact` (метод `actionContact()` класу `SiteController`);
 6. Метод `actionContact()` виводить [представлення](/doc/guide/uk/basics.view) `contact`.
    При цьому підключається файл представлення `/wwwroot/blog/protected/views/site/contact.php` 
    і результат його виконання підставляється в [макет](/doc/guide/uk/basics.view#layout)
    `/wwwroot/blog/protected/views/layouts/column1.php`.